package com.yllt4cloud.common.ddbase.containers;

import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;

/**
 * 
 * <p><b>类名称：</b>HaiMeiSheBeiContainer </p>
 * <p><b>类描述：</b>海媚设备  mac地址与ip的关系</p>
 * <p><b>日期：</b>2016-8-11 下午3:48:07</p>
 * @author yaozq
 */
@Component
public class HaiMeiSheBeiContainer {

	private static HaiMeiSheBeiContainer sheBeiContainer = null;
	
	//mac地址对应ip关系
	private ConcurrentHashMap<String, String> sheBeiMap = new ConcurrentHashMap<String, String>(); 
	//mac地址对应卡关系
	private ConcurrentHashMap<String, String> macCardMap = new ConcurrentHashMap<String, String>(); 
	//获取实例
	public static HaiMeiSheBeiContainer instance(){
		if (null == sheBeiContainer) {
            synchronized (HaiMeiSheBeiContainer.class) {
                if (null == sheBeiContainer) {
                	sheBeiContainer = new HaiMeiSheBeiContainer();
                }
            }
        }
        return sheBeiContainer;
	}
	
	//获取ip地址
	public String getIp(String mac){
		return sheBeiMap.get(mac);
	}
	//获取ip地址
	public String getCard(String mac){
		return macCardMap.get(mac);
	}
	
	public void setSheBei(String mac, String ip){
		sheBeiMap.put(mac, ip);
	}
	public void setMacCard(String mac, String card){
		macCardMap.put(mac, card);
	}
	//根据ip获取物理地址
	public Object getMac(String value) {
		  Object o=null;
		  ArrayList all=new ArrayList();    //建一个数组用来存放符合条件的KEY值
		/* 这里关键是那个entrySet()的方法,它会返回一个包含Map.Entry集的Set对象. Map.Entry对象有getValue和getKey的方法,利用这两个方法就可以达到从值取键的目的了 **/  
		 Set set=sheBeiMap.entrySet();
		  Iterator it=set.iterator();
		  while(it.hasNext()) {
		   Map.Entry entry=(Map.Entry)it.next();
		   if(entry.getValue().equals(value)) {
		    o=entry.getKey();
		   }
		  }
		  return o;
	}
	/**
	 * 清空缓存(日结的时候清空缓存) 不清空缓存会造成同一个ip可能对应两个mac 全场开机后ip是重新分配的
	 */
	public void clearMap(){
		sheBeiMap.clear();
		macCardMap.clear();
	}
}
